Test Series - Data Structure

Test Number 47/115

Q: What is xor linked list?
A. uses of bitwise XOR operation to decrease storage requirements for doubly linked lists
B. uses of bitwise XOR operation to decrease storage requirements for linked lists
C. uses of bitwise operations to decrease storage requirements for doubly linked lists
D. just another form of linked list
Solution: Why we use bitwise XOR operation is to decrease storage requirements for doubly linked lists.
Q: What does a xor linked list have?
A. every node stores the XOR of addresses of previous and next nodes
B. actuall memory address of next node
C. every node stores the XOR of addresses of previous and next two nodes
D. every node stores xor 0 and the current node address
Solution: Every node stores the XOR of addresses.
Q: What does first and last nodes of a xor linked lists contain ? (let address of first and last be A and B)
A. NULL xor A and B xor NULL
B. NULL and NULL
C. A and B
D. NULL xor A and B
Solution: NULL xor A and B xor NULL.
Q: Which of the following is an advantage of XOR list?
A. Almost of debugging tools cannot follow the XOR chain, making debugging difficult
B. You need to remember the address of the previously accessed node in order to calculate the next node’s address
C. In some contexts XOR of pointers is not defined
D. XOR list decreases the space requirement in doubly linked list
Solution: XOR linked list stores the address of previous and next nodes by performing XOR operations. It requires single pointer to store both XOR address of next and previous nodes. Thus it reduces space. It is an advantage. But the main disadvantages are debugging tools cannot follow XOR chain, previous node address must be remembered to get next nodes and pointers are not defined accurately.
Q: Which of the following is not the properties of XOR lists?
A. X⊕X = 0
B. X⊕0 = X
C. (X⊕Y)⊕Z = X⊕(Y⊕Z)
D. X⊕0 = 1
Solution: The important properties of XOR lists are X⊕X=0, X⊕0=X and (X⊕Y)⊕Z = X⊕(Y⊕Z).
Q: Which of the following statements are true?
i) practical application of XOR linked lists are in environments with limited space requirements, such as embedded devices.
ii)xor lists are not suitable because most garbage collectors will fail to work properly with classes or structures that don’t contain literal pointers
iii)in order to calculate the address of the next node you need to remember the address of the previous node
iv)xor lists are much efficient than single, doubly linked lists and arrays
A. i, ii, iii, iv
B. i, ii, iii
C. i, ii
D. i
Solution: Xor lists requires same time for most of the operations as arrays would require.
Q: Given 10,8,6,7,9
swap the above numbers such that finally you got 6,7,8,9,10
so now reverse 10
9,7,6,8,10
now reverse 9
8,6,7,9,10
7,6,8,9,10
6,7,8,9,10
at this point 6 is ahead so no more reversing can be done so stop.
To implement above algorithm which datastructure is better and why ?
A. linked list. because we can swap elements easily
B. arrays. because we can swap elements easily
C. xor linked list. because there is no overhead of pointers and so memory is saved
D. doubly linked list. because you can traverse back and forth
Solution: XOR linked lists are used to reduce the memory by storing the XOR values of address instead of actual address in pointers.
Q: Consider the following pseudocode of insertion in XOR list and write the approximate code snippet of it.

void xor-linked-list insert(struct node **head_ref, int value)
{
    node *new_node  = new (struct node);
    new_node->value = value;
    new_node->nodepointerxored = xor (*head_ref, NULL);
    if (*head_pointer == NULL)
    {
        printf("invalid");
    }
    else
    {
        let b,c,d are nodes and a is to be inserted at beginning,
        a address field must contain NULL xor b and b 
        address filed must be a xor c.
    }
    *head_pointer = new_node;
}
A. node* next = XOR ((*head_ref)->npx, NULL); (*head_ref)->npx = XOR (new_node, next);
B. node* next = XOR ((*head_ref)->npx, NULL); (*head_ref) = XOR (new_node, next);
C. node* next = XOR ((*head_ref)->npx, NULL); (*head_ref)->npx->npx = XOR (new_node, next);
D. node* next = XOR ((*head_ref), NULL); (*head_ref)->npx = XOR (new_node, next);
Solution: They code for the english is
node* next = XOR ((*head_ref)->npx,  NULL);
  (*head_ref)->npx = XOR (new_node, next);
Q:  In the above question would using arrays and swaping of elements in place of xor linked list would have been more efficient?
A. no not all
B. yes arrays would have been better than xor lists
C. both would be same in efficiency
D. can’t say
Solution: The locality of a normal array is faster in memory and moreover one has to traverse n-nodes to reach the target to reverse in case of xor linked list.

You Have Score    /9